package com.example.demo.controller;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@Configuration
public class InvokerController {
	
	/**
	 * RestTemplate本来是spring-web模块下的类，主要用调用REST服务，本身并不具备调用分布式服务的能力，
	 * 但是RestTemplate的bean被@LoadBalanced注解修饰后，这个RestTemplate实例就具备访问分布式服务的能力
	 * 
	 */
	@Bean
	@LoadBalanced
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}
	
	@RequestMapping(value="/router",method=RequestMethod.GET,
			produces=MediaType.APPLICATION_JSON_VALUE)
	public String router() {
		RestTemplate restTemplate = this.getRestTemplate();
		
		//根据应用名称调用服务
		String json = restTemplate.getForObject("http://spring-cloud-provider-demo1/person/1", String.class);
		return json;
	}
}
